package com.xyxeshang.es.music.backend.service;

import com.xyxeshang.es.music.backend.entity.Listen;
import com.xyxeshang.es.music.backend.entity.Song;
import com.xyxeshang.es.music.backend.entity.SongComment;
import com.xyxeshang.es.music.backend.entity.SongLike;
import com.xyxeshang.es.music.backend.util.ResultUtil;
import org.apache.ibatis.jdbc.Null;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author xyx-Eshang
 */
public interface SongService {

	/**
	 * 搜索歌曲
	 *
	 * @param key
	 * @param offset
	 * @return
	 */
	ResultUtil<List<Song>> searchSong(String key, Integer offset);

	/**
	 * 根据歌曲id和类型获取歌曲信息
	 *
	 * @param songId
	 * @param type
	 * @return
	 */
	ResultUtil<Song> getSong(String songId, String type);

	/**
	 * 播放歌曲
	 *
	 * @param request
	 * @param songId
	 * @return
	 */
	ResultUtil<String> playSong(HttpServletRequest request, String songId);

	/**
	 * 获取榜单歌曲
	 *
	 * @param type
	 * @param count
	 * @return
	 */
	ResultUtil<List<Song>> getBillboard(String type, Integer count);

	/**
	 * 新增评论
	 *
	 * @param request
	 * @param songCommentContent
	 * @param songId
	 * @return
	 */
	ResultUtil<Integer> addComment(HttpServletRequest request, String songCommentContent, String songId);

	/**
	 * 删除评论
	 *
	 * @param songCommentId
	 * @return
	 */
	ResultUtil<Null> deleteComment(Integer songCommentId);

	/**
	 * 根据歌曲id，查询我的评论
	 *
	 * @param request
	 * @param songId
	 * @return
	 */
	ResultUtil<List<SongComment>> listMyComment(HttpServletRequest request, String songId);

	/**
	 * 根据歌曲id查询所有评论
	 *
	 * @param songId
	 * @return
	 */
	ResultUtil<List<SongComment>> listComment(String songId);

	/**
	 * 点赞
	 *
	 * @param request
	 * @param songId
	 * @return
	 */
	ResultUtil<Integer> addLike(HttpServletRequest request, String songId);

	/**
	 * 删除点赞记录
	 *
	 * @param songLikeId
	 * @return
	 */
	ResultUtil<Null> deleteLike(Integer songLikeId);

	/**
	 * 根据歌曲id，查询我的点赞记录
	 *
	 * @param request
	 * @param songId
	 * @return
	 */
	ResultUtil<SongLike> getMySongLike(HttpServletRequest request, String songId);

	/**
	 * 查询我点赞的歌曲
	 *
	 * @param request
	 * @return
	 */
	ResultUtil<List<Song>> listMyLikeSong(HttpServletRequest request);

	/**
	 * 查询我的听歌记录
	 *
	 * @param request
	 * @return
	 */
	ResultUtil<List<Listen>> listMyListen(HttpServletRequest request);

}
